// 做状态初始化

import { observe } from "./observe/index"
import { isFunction } from "./utils"

export function initState (vm) {
  const opts = vm.$options
  // if (opts.props) {
  //   initProps()
  // }
  if (opts.data) {
    initData(vm)
  }
  // if (opts.computed) {
  //   initComputed()
  // }
  // if (opts.watch) {
  //   initWatch()
  // }
}
function proxy (vm, source, key) {
  Object.defineProperty(vm, key, {
    get () {
      return vm[source][key]
    },
    set (newVal) {
      vm[source][key] = newVal
    }
  })
}
function initData (vm) {
  let data = vm.$options.data
  // 数据拿到  去做响应式(数据劫持) 通过Object.defineProperty
  // 问题 data可以是对象可以是函数
  data = vm._data = isFunction(data) ? data.call(vm) : data
  for (let key in data) {
    proxy(vm, '_data', key)
  }
  // 响应式 observe()
  observe(data)
}